Aller au contenu principal

Indexation des DataFrames

L'index est une collection ordonnée d'étiquettes servant à la sélection et à l'alignement. Il n’a pas besoin d’être une clé primaire de base de données, mais son unicité et son ordre influencent de nombreuses opérations.

Indexeurs principaux

import pandas as pd

df = pd.DataFrame({
"order_id": ["order-42", "order-43"],
"status": ["paid", "pending"],
"customer_id": ["C1", "C2"],
"amount": [120, 80],
}, index=["order-42", "order-43"])
df.loc["order-42", ["status", "amount"]] # étiquettes
df.iloc[0:10, [1, 3]] # positions
df.at["order-42", "status"] # un scalaire par étiquette
df.iat[0, 1] # un scalaire par position

Les tranches d'étiquettes avec .loc incluent généralement les deux bornes lorsqu'elles existent ; les tranches positionnelles avec .iloc suivent la convention Python semi-ouverte.

Définir et réinitialiser

indexed = df.set_index("order_id", verify_integrity=True)
plain = indexed.reset_index()

Utilisez verify_integrity=True lorsque l'unicité est requise. Triez l'index si les opérations suivantes dépendent de tranches ordonnées ou d'un comportement de série temporelle.

MultiIndex

Un MultiIndex représente plusieurs niveaux d'étiquettes sur un axe. Il est utile lorsque la sélection hiérarchique, le remodelage ou les sorties groupées sont au cœur du travail :

sales = pd.DataFrame({
"country": ["Canada", "Canada"], "city": ["Toronto", "Ottawa"], "amount": [10, 20]
})
by_region = sales.set_index(["country", "city"]).sort_index()
toronto = by_region.loc[("Canada", "Toronto")]
canada = by_region.loc["Canada"]

Préférez des colonnes ordinaires si la hiérarchie est temporaire ou si les outils en aval attendent des tables plates. reset_index restitue les niveaux sous forme de colonnes.

Risque d'alignement

Les affectations et calculs entre objets pandas s'alignent par étiquette. Si la position est voulue, rendez la conversion explicite et vérifiez les longueurs. L'alignement silencieux est une force de pandas, mais aussi une source fréquente de valeurs manquantes inattendues.

Formes de sélection et étiquettes dupliquées

Avec ces étiquettes uniques, df.loc["order-42", ["status", "amount"]] renvoie une Series de longueur 2, df.iloc[0:10, [1, 3]] un DataFrame (2, 2), et les deux accès scalaires renvoient "paid". Utilisez df.loc[["order-42"], ["status", "amount"]] pour conserver une table (1, 2). Une tranche positionnelle s’arrête à la fin ; une position scalaire hors limites lève IndexError.

Un Index est une collection ordonnée, pas un ensemble mathématique : les doublons sont permis. Un accès par une seule étiquette peut donc renvoyer plusieurs lignes. Vérifiez df.index.is_unique et df.columns.is_unique avant de supposer un résultat scalaire. Contrairement à loc, reindex construit les étiquettes demandées et insère des valeurs manquantes pour les absentes ; la recherche stricte par étiquette lève KeyError.

Sources

Explorer les liensOuvrir le réseau